package com.mysqld;

import com.event.ChangeOwnEvent;
import com.event.LoginEvent;
import com.window.*;

import javax.swing.*;
import java.sql.*;

public class Mysqld {
    public static String Driver = "com.mysql.jdbc.Driver";
    public static String url = "jdbc:mysql://localhost:3306/student?useSSL=false&useUnicode=true&characterEncoding=utf8";
    public static String user = "root";
    public static String password = "ct19991207";//数据库密码
    public static Connection conn = null;


    //将注册的账号信息导入数据库
    public static void writeRegister() throws ClassNotFoundException, SQLException {
        Class.forName(Driver);//加载驱动
        conn = DriverManager.getConnection(url, user, password);//和数据库建立链接
        System.out.println("数据库连接成功，注册信息已导入！");
        //将注册的账号信息导入数据库
        PreparedStatement preSql;
        String sql = "insert into user values(?,?,?,?)";//准备sql命令
        char[] str = Register.passwordtext.getPassword();
        String password1 = new String(str);
        preSql = conn.prepareStatement(sql);
        preSql.setString(1, Register.nametext.getText());
        preSql.setString(2, Register.accounttext.getText());
        preSql.setString(3, password1);
        preSql.setString(4, "0");
        preSql.executeUpdate();//发射命令
    }

    //登录时对数据库数据读
    public static boolean loginAccount(String account, String passworda) throws SQLException, ClassNotFoundException {
        Class.forName(Driver);//加载驱动
        conn = DriverManager.getConnection(url, user, password);//和数据库建立链接
        Statement stmt;//创建sql命令发送器
        ResultSet rs;//定义结果
        stmt = conn.createStatement();//sql命令发送器
        String sql = "select account,password from user";//准备sql命令
        //executeQuery()方法会把数据库响应的查询结果存放在ResultSet类对象中供使用。
        rs = stmt.executeQuery(sql);//发送命令给结果
        while (rs.next()) {
            String acc = rs.getString(1);//返回第一个值为账号
            String pass = rs.getString(2);//返回第二个值为密码
            if (acc.equals(account) && pass.equals(passworda)) {
                return true;
            }
        }
        return false;
    }

    //改信息时对数据库数据读
    public static boolean changeinfo(String account) throws SQLException, ClassNotFoundException {
        Class.forName(Driver);//加载驱动
        conn = DriverManager.getConnection(url, user, password);//和数据库建立链接
        Statement stmt;//创建sql命令发送器
        ResultSet rs;//定义结果
        stmt = conn.createStatement();//sql命令发送器
        String sql = "select account from user";//准备sql命令
        //executeQuery()方法会把数据库响应的查询结果存放在ResultSet类对象中供使用。
        rs = stmt.executeQuery(sql);//发送命令给结果
        while (rs.next()) {
            String acc = rs.getString(1);//返回第一个值为账号
            if (acc.equals(account)) {
                return true;
            }
        }
        return false;
    }

    //查看在线员工账号信息
    public static void onlineAccount() throws SQLException, ClassNotFoundException {
        Class.forName(Driver);//加载驱动
        conn = DriverManager.getConnection(url, user, password);//和数据库建立链接
        Statement stmt;//创建sql命令发送器
        ResultSet rs;//定义结果
        stmt = conn.createStatement();//sql命令发送器
        String sql = "select * from user";//准备sql命令
        //executeQuery()方法会把数据库响应的查询结果存放在ResultSet类对象中供使用。
        rs = stmt.executeQuery(sql);//发送命令给结果
        while (rs.next()) {
            String name = rs.getString(1);//返回第一个值为姓名
            String account = rs.getString(2);//返回第二个值为账号
            String password = rs.getString(3);//返回第三个值为密码
            String status = rs.getString(4);//返回第四个值为状态
            if (status.equals("1")) {
                String a = Manage.resultText.getText() + "姓名:" + name + "\t" + "账号:" + account + "\t" + "状态:" + "在线" + "\n";
                Manage.resultText.setText(a);
            }
        }
    }

    //查看所有员工账号信息
    public static void allAccount() throws SQLException, ClassNotFoundException {
        Class.forName(Driver);//加载驱动
        conn = DriverManager.getConnection(url, user, password);//和数据库建立链接
        Statement stmt;//创建sql命令发送器
        ResultSet rs;//定义结果
        stmt = conn.createStatement();//sql命令发送器
        String sql = "select * from user";//准备sql命令
        //executeQuery()方法会把数据库响应的查询结果存放在ResultSet类对象中供使用。
        rs = stmt.executeQuery(sql);//发送命令给结果
        while (rs.next()) {
            String name = rs.getString(1);//返回第一个值为姓名
            String account = rs.getString(2);//返回第二个值为账号
            String password = rs.getString(3);//返回第三个值为密码
            String status = rs.getString(4);//返回第四个值为状态
            if (status.equals("0")) {
                String a = Manage.resultText.getText() + "姓名:" + name + "\t" + "账号:" + account + "\t" + "状态:" + "离线" + "\n";
                Manage.resultText.setText(a);
            } else if (status.equals("1")) {
                String b = Manage.resultText.getText() + "姓名:" + name + "\t" + "账号:" + account + "\t" + "状态:" + "在线" + "\n";
                Manage.resultText.setText(b);
            }
        }
    }

    //更改员工账号信息
    public static void changeotheraccount() throws SQLException, ClassNotFoundException {
        Class.forName(Driver);//加载驱动
        conn = DriverManager.getConnection(url, user, password);//和数据库建立链接
        PreparedStatement preSql;
        String sql = "update user set name=?,password=? where account=?";//准备sql命令
        preSql = conn.prepareStatement(sql);
        char[] str = ChangeAccountInfo.passwordtext.getPassword();
        String password = new String(str);
        preSql.setString(1, ChangeAccountInfo.nametext.getText());
        preSql.setString(2, password);
        preSql.setString(3, ChangeAccountInfo.accounttext.getText());
        preSql.executeUpdate();//发射命令
    }

    //更改当前账号密码
    public static void changeownpass() throws SQLException, ClassNotFoundException {
        Class.forName(Driver);//加载驱动
        conn = DriverManager.getConnection(url, user, password);//和数据库建立链接
        PreparedStatement preSql;
        String sql = "update user set password=? where account=?";//准备sql命令
        preSql = conn.prepareStatement(sql);
        preSql.setString(1, ChangeOwnEvent.changepass);
        preSql.setString(2, LoginEvent.accountA);
        preSql.executeUpdate();//发射命令
    }

    //设置状态
    public static void setStatus(int statusa) throws SQLException, ClassNotFoundException//传账号
    {
        Class.forName(Driver);//加载驱动
        conn = DriverManager.getConnection(url, user, password);//和数据库建立链接
        PreparedStatement preSql;
        String sql = "update user set status=? where account=?";//准备sql命令
        preSql = conn.prepareStatement(sql);
        preSql.setInt(1, statusa);
        preSql.setString(2, LoginStart.accounttext.getText());
        preSql.executeUpdate();//发射命令
    }

    //查询状态
    public static String selectstatus() throws SQLException, ClassNotFoundException {
        Class.forName(Driver);//加载驱动
        conn = DriverManager.getConnection(url, user, password);//和数据库建立链接
        PreparedStatement preSql;
        ResultSet rs;//定义结果
        String statusa = "a";
        String sql = "select status from user where account=?";//准备sql命令
        preSql = conn.prepareStatement(sql);
        preSql.setString(1, LoginStart.accounttext.getText());
        //executeQuery()方法会把数据库响应的查询结果存放在ResultSet类对象中供使用。
        rs = preSql.executeQuery();//发送命令给结果
        while (rs.next()) {
            statusa = rs.getString(1);//返回第一个值为状态
        }
        return statusa;
    }

    //添加学生信息
    public static void addStudent(String Sexx) throws SQLException, ClassNotFoundException {
        Class.forName(Driver);//加载驱动
        conn = DriverManager.getConnection(url, user, password);//和数据库建立链接
        try {
            String sql = "insert into InfoData values(?,?,?,?,?)";//准备sql命令
            PreparedStatement preSql;
            preSql = conn.prepareStatement(sql);
            preSql.setString(1, Manage.nametext.getText());
            preSql.setString(2, Sexx);
            preSql.setString(3, Manage.agetext.getText());
            preSql.setString(4, Manage.gradetext.getText());
            preSql.setString(5, Manage.numbertext.getText());
            preSql.executeUpdate();//发射命令
            JOptionPane.showMessageDialog(null, "添加成功!", "添加页面", JOptionPane.WARNING_MESSAGE);
        } catch (SQLException e) {
            JOptionPane.showMessageDialog(null, "当前学号已经存在!", "添加页面", JOptionPane.WARNING_MESSAGE);
        }
    }

    //删除学生信息
    public static void delStudent() throws SQLException, ClassNotFoundException {
        Class.forName(Driver);//加载驱动
        conn = DriverManager.getConnection(url, user, password);//和数据库建立链接
        try {
            String sql = "delete from InfoData where number=?";//准备sql命令
            PreparedStatement preSql;
            preSql = conn.prepareStatement(sql);
            preSql.setString(1, Manage.numberconditiontext.getText());
            preSql.executeUpdate();//发射命令
            JOptionPane.showMessageDialog(null, "删除信息成功!", "删除页面", JOptionPane.WARNING_MESSAGE);
        } catch (SQLException e) {
        }
    }

    //判断学号是否存在
    public static boolean selectnumber() throws SQLException, ClassNotFoundException {
        Class.forName(Driver);//加载驱动
        conn = DriverManager.getConnection(url, user, password);//和数据库建立链接
        Statement stmt;//创建sql命令发送器
        ResultSet rs;//定义结果
        stmt = conn.createStatement();//sql命令发送器
        String sql = "select number from InfoData";//准备sql命令
        //executeQuery()方法会把数据库响应的查询结果存放在ResultSet类对象中供使用。
        rs = stmt.executeQuery(sql);//发送命令给结果
        while (rs.next()) {
            String num = rs.getString(1);//返回第一个值为学号
            if (num.equals(Manage.numberconditiontext.getText())) {
                return true;
            }
        }
        return false;
    }

    //判断学号是否存在1
    public static boolean select1number() throws SQLException, ClassNotFoundException {
        Class.forName(Driver);//加载驱动
        conn = DriverManager.getConnection(url, user, password);//和数据库建立链接
        Statement stmt;//创建sql命令发送器
        ResultSet rs;//定义结果
        stmt = conn.createStatement();//sql命令发送器
        String sql = "select number from InfoData";//准备sql命令
        //executeQuery()方法会把数据库响应的查询结果存放在ResultSet类对象中供使用。
        rs = stmt.executeQuery(sql);//发送命令给结果
        while (rs.next()) {
            String num = rs.getString(1);//返回第一个值为学号
            if (num.equals(select.aa.getText())) {
                return true;
            }
        }
        return false;
    }

    //判断班级号是否存在
    public static boolean selectgrade() throws SQLException, ClassNotFoundException {
        Class.forName(Driver);//加载驱动
        conn = DriverManager.getConnection(url, user, password);//和数据库建立链接
        Statement stmt;//创建sql命令发送器
        ResultSet rs;//定义结果
        stmt = conn.createStatement();//sql命令发送器
        String sql = "select grade from InfoData";//准备sql命令
        //executeQuery()方法会把数据库响应的查询结果存放在ResultSet类对象中供使用。
        rs = stmt.executeQuery(sql);//发送命令给结果
        while (rs.next()) {
            String gra = rs.getString(1);//返回第一个值为学号
            if (gra.equals(select.cc.getText())) {
                return true;
            }
        }
        return false;
    }

    //判断年龄是否存在
    public static boolean selectage() throws SQLException, ClassNotFoundException {
        Class.forName(Driver);//加载驱动
        conn = DriverManager.getConnection(url, user, password);//和数据库建立链接
        Statement stmt;//创建sql命令发送器
        ResultSet rs;//定义结果
        stmt = conn.createStatement();//sql命令发送器
        String sql = "select age from InfoData";//准备sql命令
        //executeQuery()方法会把数据库响应的查询结果存放在ResultSet类对象中供使用。
        rs = stmt.executeQuery(sql);//发送命令给结果
        while (rs.next()) {
            String ag = rs.getString(1);//返回第一个值为学号
            if (ag.equals(select.dd.getText())) {
                return true;
            }
        }
        return false;
    }

    //添加或修改学生信息时输出学生信息
    public static void show1StuInfo() throws SQLException, ClassNotFoundException {
        Class.forName(Driver);//加载驱动
        conn = DriverManager.getConnection(url, user, password);//和数据库建立链接
        Statement stmt;//创建sql命令发送器
        ResultSet rs;//定义结果
        stmt = conn.createStatement();//sql命令发送器
        String sql = "select * from InfoData";//准备sql命令
        //executeQuery()方法会把数据库响应的查询结果存放在ResultSet类对象中供使用。
        rs = stmt.executeQuery(sql);//发送命令给结果
        while (rs.next()) {
            String na = rs.getString(1);//返回第一个值为姓名
            String se = rs.getString(2);//返回第二个值为性别
            String ag = rs.getString(3);//返回第三个值为年龄
            String gra = rs.getString(4);//返回第四个值为班级
            String num = rs.getString(5);//返回第五个值为学号
            String[] dm = new String[5];
            dm[0] = na;
            dm[1] = se;
            dm[2] = ag;
            dm[3] = gra;
            dm[4] = num;
            if (num.equals(Manage.numbertext.getText())) {
                Manage.model.addRow(dm);//在表格中显示
            }
        }
    }

    //学号查询学生信息时输出学生信息
    public static void show2StuInfo() throws SQLException, ClassNotFoundException {
        Class.forName(Driver);//加载驱动
        conn = DriverManager.getConnection(url, user, password);//和数据库建立链接
        Statement stmt;//创建sql命令发送器
        ResultSet rs;//定义结果
        stmt = conn.createStatement();//sql命令发送器
        String sql = "select * from InfoData";//准备sql命令
        //executeQuery()方法会把数据库响应的查询结果存放在ResultSet类对象中供使用。
        rs = stmt.executeQuery(sql);//发送命令给结果
        while (rs.next()) {
            String na = rs.getString(1);//返回第一个值为姓名
            String se = rs.getString(2);//返回第二个值为性别
            String ag = rs.getString(3);//返回第三个值为年龄
            String gra = rs.getString(4);//返回第四个值为班级
            String num = rs.getString(5);//返回第五个值为学号
            String[] dm = new String[5];
            dm[0] = na;
            dm[1] = se;
            dm[2] = ag;
            dm[3] = gra;
            dm[4] = num;
            if (num.equals(select.aa.getText())) {
                Manage.model.addRow(dm);//在表格中显示
            }
        }
    }

    //班级查询学生信息时输出学生信息
    public static void show3StuInfo() throws SQLException, ClassNotFoundException {
        Class.forName(Driver);//加载驱动
        conn = DriverManager.getConnection(url, user, password);//和数据库建立链接
        Statement stmt;//创建sql命令发送器
        ResultSet rs;//定义结果
        stmt = conn.createStatement();//sql命令发送器
        String sql = "select * from InfoData";//准备sql命令
        //executeQuery()方法会把数据库响应的查询结果存放在ResultSet类对象中供使用。
        rs = stmt.executeQuery(sql);//发送命令给结果
        while (rs.next()) {
            String na = rs.getString(1);//返回第一个值为姓名
            String se = rs.getString(2);//返回第二个值为性别
            String ag = rs.getString(3);//返回第三个值为年龄
            String gra = rs.getString(4);//返回第四个值为班级
            String num = rs.getString(5);//返回第五个值为学号
            String[] dm = new String[5];
            dm[0] = na;
            dm[1] = se;
            dm[2] = ag;
            dm[3] = gra;
            dm[4] = num;
            if (gra.equals(select.cc.getText())) {
                Manage.model.addRow(dm);//在表格中显示
            }
        }
    }

    //年龄查询学生信息时输出学生信息
    public static void show4StuInfo() throws SQLException, ClassNotFoundException {
        Class.forName(Driver);//加载驱动
        conn = DriverManager.getConnection(url, user, password);//和数据库建立链接
        Statement stmt;//创建sql命令发送器
        ResultSet rs;//定义结果
        stmt = conn.createStatement();//sql命令发送器
        String sql = "select * from InfoData";//准备sql命令
        //executeQuery()方法会把数据库响应的查询结果存放在ResultSet类对象中供使用。
        rs = stmt.executeQuery(sql);//发送命令给结果
        while (rs.next()) {
            String na = rs.getString(1);//返回第一个值为姓名
            String se = rs.getString(2);//返回第二个值为性别
            String ag = rs.getString(3);//返回第三个值为年龄
            String gra = rs.getString(4);//返回第四个值为班级
            String num = rs.getString(5);//返回第五个值为学号
            String[] dm = new String[5];
            dm[0] = na;
            dm[1] = se;
            dm[2] = ag;
            dm[3] = gra;
            dm[4] = num;
            if (ag.equals(select.dd.getText())) {
                Manage.model.addRow(dm);//在表格中显示
            }
        }
    }

    //性别查询学生信息时输出学生信息
    public static void show5StuInfo() throws SQLException, ClassNotFoundException {
        Class.forName(Driver);//加载驱动
        conn = DriverManager.getConnection(url, user, password);//和数据库建立链接
        Statement stmt;//创建sql命令发送器
        ResultSet rs;//定义结果
        stmt = conn.createStatement();//sql命令发送器
        String sql = "select * from InfoData";//准备sql命令
        //executeQuery()方法会把数据库响应的查询结果存放在ResultSet类对象中供使用。
        rs = stmt.executeQuery(sql);//发送命令给结果
        while (rs.next()) {
            String na = rs.getString(1);//返回第一个值为姓名
            String se = rs.getString(2);//返回第二个值为性别
            String ag = rs.getString(3);//返回第三个值为年龄
            String gra = rs.getString(4);//返回第四个值为班级
            String num = rs.getString(5);//返回第五个值为学号
            String[] dm = new String[5];
            dm[0] = na;
            dm[1] = se;
            dm[2] = ag;
            dm[3] = gra;
            dm[4] = num;
            if (se.equals(select.bb.getText())) {
                Manage.model.addRow(dm);//在表格中显示
            }
        }
    }


    //修改学生信息
    public static void changeStuInfo(String sexx) throws SQLException, ClassNotFoundException {
        Class.forName(Driver);//加载驱动
        conn = DriverManager.getConnection(url, user, password);//和数据库建立链接
        String sql = "update InfoData set name=? ,sex=? ,age=? ,grade=? ,number=? where number=?";//准备sql命令
        PreparedStatement preSql;
        preSql = conn.prepareStatement(sql);
        preSql.setString(1, Manage.nametext.getText());
        preSql.setString(2, sexx);
        preSql.setString(3, Manage.agetext.getText());
        preSql.setString(4, Manage.gradetext.getText());
        preSql.setString(5, Manage.numbertext.getText());
        preSql.setString(6, Manage.numberconditiontext.getText());
        preSql.executeUpdate();//发射命令
        JOptionPane.showMessageDialog(null, "修改成功!", "修改页面", JOptionPane.WARNING_MESSAGE);
    }


}
